package ln;

import ig.RellenarDisponibilidad;
import ig.Reserva;

import java.net.MalformedURLException;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;
import java.sql.Date;
import java.util.Vector;

import javax.swing.JFrame;

import cd.CapaDatosRemote;
import cd.InterfaceCapaDatosRemote;

@SuppressWarnings("serial")
public class LogicaNegocioRemote extends UnicastRemoteObject implements InterfaceLogicaNegocioRemote {

	public static final int numPuerto = 3000;
	public static final String nombreServicio = "LogicaNegocioRemote";
	int numPuertoDatos = 4000;
	String nombreServicioDatos = "CapaDatosRemote";
	InterfaceCapaDatosRemote gestorDatos;


	public LogicaNegocioRemote() throws RemoteException {

		try {
			gestorDatos = (InterfaceCapaDatosRemote)Naming.lookup("rmi://localhost:" +
					Integer.toString(numPuertoDatos ) + "/" + nombreServicioDatos);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public boolean crearOfertas(int numCasa, Date diaIni, Date diaFin, float precio){
		boolean resultado = false;
		try {
			resultado = gestorDatos.asignarOfertas(numCasa,diaIni,diaFin,precio);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return resultado;
	}
	
	public Vector obtenercasas(String usuario){
		Vector ListadeCasas = new Vector();
		try {
			ListadeCasas = gestorDatos.seleccionarCasas(usuario);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ListadeCasas;
	}
	
	public boolean comprobarLogin(String usuario, String password) {
		// TODO Auto-generated method stub
		String pr = null;
		Vector ListaDeCasas = null;
			try {
				pr = gestorDatos.obtenerPassword(usuario);
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//System.out.println("Po= " +password + " pr= " +pr + " user= "+usuario);
			if (pr == null)
			{
				return false;
			}
			else if (pr.equals(password))
				{
				return true;
				}
			else{
				return false;
			}
	}
	
	public Vector<Reserva> obtReservas(Date di,Date df, String Usuario)
	{
		Vector<Reserva> Reservas  = new Vector<Reserva>();
		try {
			Reservas = gestorDatos.reservas(di,df,Usuario);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return Reservas;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.setSecurityManager(new RMISecurityManager());		
		
		try { 
			
			LogicaNegocioRemote objetoServidor = new LogicaNegocioRemote();
			try { 
				java.rmi.registry.LocateRegistry.createRegistry(numPuerto);
			} catch (Exception e) {
				System.out.println(e.toString()+"\nSe supone que el error se produce porque el rmiregistry ya estaba lanzado");
			}

			Naming.rebind("//localhost:" + Integer.toString(numPuerto) + "/" + nombreServicio,objetoServidor);
			System.out.println("Servidor lanzado (logica de negocio)");
		}
		catch (Exception e) {
			System.out.println("Error al lanzar el servidor " + e.toString());
		}
		
	}

}
